/**
 * Created with IntelliJ IDEA.
 * User: a.cabrera
 * Date: 17/06/13
 * Time: 10:12
 * To change this template use File | Settings | File Templates.
 */
var map = null;
var markers = new OpenLayers.Layer.Markers( "Markers" );
var lonlat = new OpenLayers.LonLat(-66,9);
var proj4326 = new OpenLayers.Projection("EPSG:4326");
var projmerc = new OpenLayers.Projection("EPSG:900913");
lonlat.transform(proj4326, projmerc);


function updateEstados(pais) {
    ${remoteFunction(
        controller: 'demographic',
        action: 'ajaxGetEstados',
        update: 'entidresid',
        params: '\'id=\' + pais')}
}

function updateMunicipios(estado){
    ${remoteFunction(
        controller: 'demographic',
        action: 'ajaxGetMunicipios',
        update: 'municnace',
        params: '\'id=\' + estado')}
}

function updateMunicipiosReside(estado){
    ${remoteFunction(
        controller: 'demographic',
        action: 'ajaxGetMunicipios',
        onComplete: 'getCoordenadas(1)',
        asynchronous: 'false',
        update: 'municresid',
        params: '\'id=\' + estado')}
}

function updateParroquiaReside(municipio){
    ${remoteFunction(
        controller: 'demographic',
        action: 'ajaxGetMunicipios',
        onComplete: 'getCoordenadas(2)',
        asynchronous: 'false',
        update: 'direccion',
        params: '\'id=\' + municipio')}
}

function updateCallesReside(calle){
    ${remoteFunction(
        controller: 'demographic',
        action: 'ajaxGetCalles',
        onComplete: 'getCoordenadas(3)',
        asynchronous: 'false',
        update: 'calles',
        params: '\'id=\' + calle')}
}

function otraCalle(calle){
     if (calle == -2){
     alert ("Introduzca el nombre de su calle y seleccionela en el mapa");
        ${remoteFunction(
            controller: 'demographic',
            action: 'ajaxOtraCalle',
            onComplete: 'addMapListener()',
            asynchronous: 'false',
            update: 'calles',
            params: '\'id=\' + calle')}
    } else{

       getCoordenadas(4)
    }
}

function addMapListener(){
    map.addLayer(markers);
    var size = new OpenLayers.Size(10,10);
    var offset = new OpenLayers.Pixel(-(size.w/2), -size.h);
    var icon = new OpenLayers.Icon('marker.png', size, offset);
    marker = new OpenLayers.Marker(lonlat);
    markers.addMarker(marker,icon);
    map.events.register("click", map, function(e) {
        var opx = map.getLayerPxFromViewPortPx(e.xy) ;
	    marker.map = map ;
	    marker.moveTo(opx) ;
        var position = this.events.getMousePosition(e);
        var lonlat = map.getLonLatFromPixel(position);
        var lonlatTransf = lonlat.transform(map.getProjectionObject(), proj4326);
        alert ('latitud='+lonlatTransf.lat+' longitud='+lonlatTransf.lon);
        var lonlat = lonlatTransf.transform(proj4326, map.getProjectionObject());
        map.addLayer(marker);
    });
}

function showMap(){
    updateEstados(1);
    var lonlat = new OpenLayers.LonLat(-66,9);
    lonlat.transform(proj4326, projmerc);
    map = new OpenLayers.Map("MyMap");
    map.addLayer(new OpenLayers.Layer.OSM());
    map.setCenter(lonlat,5);
}

function getCoordenadas(option){
    switch(option) {
        case 1:
        var id = $j("#entidresid").val();
        ${remoteFunction(
            controller: 'demographic',
            action: 'ajaxGetCoordenadas',
            update: 'estados_coordenadas',
            onComplete:'moverMapa(1)',
            asynchronous: 'false',
            params: '\'id=\'+id + \'!\' + option')};
        break;
        case 2:
        var id = $j("#municresid").val();
        ${remoteFunction(
            controller: 'demographic',
            action: 'ajaxGetCoordenadas',
            update: 'municipios_coordenadas',
            onComplete:'moverMapa(2)',
            asynchronous: 'false',
            params: '\'id=\'+id + \'!\' + option')};
        break;
        case 3:
        var id = $j("#direccion").val();
        ${remoteFunction(
            controller: 'demographic',
            action: 'ajaxGetCoordenadas',
            update: 'parroquias_coordenadas',
            onComplete:'moverMapa(3)',
            asynchronous: 'false',
            params: '\'id=\'+id + \'!\' + option')};
        break;
        case 4:
        var id = $j("#avenidacalle").val();
        ${remoteFunction(
            controller: 'demographic',
            action: 'ajaxGetCoordenadas',
            update: 'calles_coordeandas',
            onComplete:'moverMapa(4)',
            asynchronous: 'false',
            params: '\'id=\'+id + \'!\' + option')};
        break;
    }
}

function moverMapa(option){
    switch(option){
        case 1:
            var vx = $j("#lat_coordenadas_estado").attr("value");
            var vy = $j("#lon_coordenadas_estado").attr("value");
            var lonlat = new OpenLayers.LonLat(vy,vx);
            lonlat.transform(proj4326, projmerc);
            map.setCenter(lonlat,11);
        break;
        case 2:
            var vx = $j("#lat_coordenadas_municipio").attr("value");
            var vy = $j("#lon_coordenadas_municipio").attr("value");
            var lonlat = new OpenLayers.LonLat(vy,vx);
            lonlat.transform(proj4326, projmerc);
            map.setCenter(lonlat,13);
        break;
        case 3:
            var vx = $j("#lat_coordenadas_parroquia").attr("value");
            var vy = $j("#lon_coordenadas_parroquia").attr("value");
            var lonlat = new OpenLayers.LonLat(vy,vx);
            lonlat.transform(proj4326, projmerc);
            map.setCenter(lonlat,15);
        break;
        case 4:
            markers.clearMarkers();
            var vx = $j("#lat_coordenadas_calle").attr("value");
            var vy = $j("#lon_coordenadas_calle").attr("value");
            var lonlat = new OpenLayers.LonLat(vy,vx);
            lonlat.transform(proj4326, projmerc);
            map.addLayer(markers);
            markers.addMarker(new OpenLayers.Marker(lonlat));
            map.setCenter(lonlat,17);
        break;
	}
}